<?php  
/*
TODO виджет левого меню

Контроллер модуля. 

Унаследован от шаблона контроллеров модулей 
Вызывает свою модель 
Вызывает свое представление

Генерит хтмл или ошибку

  [!] $r = $this->getParam("qwe"); берет значение из УРЛ http://remontik.kh.ua/tour/photo/zxc/5/asd/90/qwe/89
*/
 


 
// контроллер вызывает модель, затем представление 
// и формирует output, а также массив входных данных для виджетов array('widget_descriptor'=>array('param_name'=>param_value)) 
 
 
class TourModul extends BasicModulController implements BasicModulControllerInterface {
// контроллер модуля

    private $message;

   // private $widget_inputdata_arr; // перенести в интерфейс BasicModulController

    function __construct($registry = null){
      
      parent::__construct();
      
      $this->registry = $registry; 
      
      if($this->getURIarg(1)){
        //echo $this->getURIarg(1);
      }
      
      
      // die(var_dump($this->action));
        
      //var_dump($this->action);
      if(isset($this->registry) AND ($this->registry->get('virtual_modul_index')) != '')
         $this->life_modul_index = $this->registry->get('virtual_modul_index'); 
      elseif(isset($this->registry) AND ($this->registry->get('modul_index')) != '')   
        $this->life_modul_index = $this->registry->get('modul_index'); 
       
      // $this->life_modul_index // 'about' 
      $this->modul_index = $this->registry->get('modul_index'); // 'Tour'
       
      // виджеты 
      $this->widget_enter_data = array();
      $this->widget_enter_data['widget'] = array('1'=>'a'); //var_dump($this->widget_enter_data);
      
      // инициализация модели
      $this->model = new Tour; // [!] подставлять переменную с именем модуля

      // инициализация представления
      $class_name = $this->modul_index . "View";
      
      $ModulView = new $class_name; // [!] подставлять переменную с именем можудя
      $this->global_view = $ModulView->getView(); // глобальное представление
      $this->view = $ModulView; // представление модуля
      
      // установка переменных, полученных из модели
      //$this->view->Set('asd',1234);
      
      self::$instance = $this;
      
      // генерация html
      // [!] закоментить после запуска Фабрики
      //$this->html = $this->view->render();
      
      // Меню слева
      //  вытащить подразделы данного модуля из базы и создать массив sections_arr
      // TODO вынести в ролителя
      $this->sections_arr = $this->getSections();  
      
      if(is_array($this->sections_arr))
        $this->view->Set('sections',$this->sections_arr);
      else   
        $this->view->Set('sections',null);
      
      $left_menu = $this->view->Get('inc_navigator.tpl');
       
      $this->global_view->Set('left_menu',$left_menu);



    } // -- __construct
    
    
    function getHtml(){
        return $this->html;
    }
    
    // [!] сделать, чтобы рендерился шаблон модуля и шаблон отдельно главный
    // попробовать взять смарти из реестра или создать второй объект
     
    static function getModulIndex(){
         
        return strtolower(MODUL);
    }
    
    
    
    public static function getInstance(){
    // [!] метод обязателен для каждого модуля
        if (!isset(self::$instance)) {
            $className = __CLASS__;
            self::$instance = new $className;
        }

        return self::$instance;
    } // --
    
    static function action(){
        //die(var_dump(__CLASS__));
        $obj = static::getInstance();
         
        $method = $obj->action;
        $obj->$method();  
        
        //die(var_dump($obj->action));
    } // --
    
 
   
    // -------- Actions ----------
    
    //function actionTourAsd()
    
    
    function actionTourBasic(){


        $this->actionTourPhoto();
        
        
    } // --
    
    function actionTourPhoto(){
   
    // 
    if($this->getURIarg(2) == 'edit' /*AND User::isAdmin()*/)
      $this->photoEdit();
    else {  
        $action = 'photo';//TODO сделать (поздгим связыванием) установку этого(!) экшена автоматически в контроллере фронтэнда
    
        $this-> view->Set('action',$action); 
        $this->  global_view->Set('navhigh',$action);
     
        // TODO [!]
        $modul_id = 7; // tour
        $section_id = 800;
        $gallery_id = 1;
     
        $photos = $this->model->getPhotos(array('modul_id'=>$modul_id, 'section_id'=>$section_id, 'gallery_id'=>$gallery_id));
        //fb($photos);
        if(is_array($photos))        
          $this->view->Set('photos',$photos);
        else
          $this->view->Set('photos','no_photo');
        
     
        $this->html =  $this->view->render();
      }    
    } // -- photo action
    
       

    private function photoEdit(){

        $action = 'photo';
        $this-> view->Set('action',$action); 
        $this->  global_view->Set('navhigh',$action);
    
        //if(!User::isAdmin()) return null;
    
        // [!]
        $modul_id = 7; // tour
        $section_id = 800;
        $gallery_id = 1;
        
        $new_photo_form_action = "/tour/storePhoto/new";
        $update_photo_form_action = "/tour/updatePhoto";

        
        $this->view->Set('new_photo_form_action',$new_photo_form_action);
        $this->view->Set('update_photo_form_action',$update_photo_form_action);
        
        $photos = $this->model->getPhotos(array('modul_id'=>$modul_id, 'section_id'=>$section_id, 'gallery_id'=>$gallery_id));
        
        if(is_array($photos))        
          $this->view->Set('photos',$photos);
        else
          $this->view->Set('photos','no_photo');
          
        $this->html = $this->view->fetch('photo.edit.tpl');
        
    } // -- photo Edit

    private function getPhotoById($photo_id){
    
        
       $q = "SELECT * FROM photo WHERE photo_id = '$photo_id'  
                                    ";
       $r = mysql_query($q);  
       if($r){     
          if( mysql_num_rows($r) > 0){
            while($row = mysql_fetch_assoc($r)){
                $tmp = $row;
                $tmp['path'] = "../Image/tour/";
                $tmp['sm_link'] = "sm_" . $tmp['link'];
                $photo = $tmp;
            }  
            return $photo; 
          }
       }
       
       return false;
    
    } // --
    
    
    
    private function insertPhoto(){



        //--

        $tmp_name = $_FILES['photo']['name']['link']; // 6.jpg
        $tmp_type = $_FILES['photo']['type']['link']; // image/jpeg
        $tmp_file = $_FILES['photo']['tmp_name']['link']; // /tmp/php5HL2GN
        $tmp_size = $_FILES['photo']['size']['link']; // 195243




        #
        $filename = $_FILES['photo']['name'];
        $unit = "hall";

        $local_path = "tmp/";
        $file_1 = $filename;
        $file_1_up = $file_1;
        $file_1 = PUBLIC_PATH . "/tmp/$file_1";;
        $file_2 = 'sm_'.$filename;
        $file_2_up = $file_2;
        $file_2 = PUBLIC_PATH . "/tmp/$file_2";


        //$this->model->imgCropAndResize($_FILES['photo']['tmp_name'],$file_1,900,600);
        //$this->model->imgCropAndResize($_FILES['photo']['tmp_name'],$file_2,300,200);

//TODO загрузить 2 файла
        if($this->model->uploadImage($file_1_up, $unit))
            $this->model->uploadImage($file_2_up, $unit);

      //  @unlink($file_1);
      //  @unlink($file_2);

        #




        exit;



        $resolution = GetImageSize($_FILES['photo']['tmp_name']['link']);
        if($resolution[0] > 3000 OR $resolution[1] > 3000){
            $this->message = 'resolution > 3000';
            fb('resolution > 3000');
            return false;
        }
         
        if(($file_size = $_FILES['photo']['size']['link']) > 2048000){
          $this->message = 'size > 2M';
            fb('size > 2M');
             return false;
        }
          
        $title = $_POST['photo']['title'];
        $text = $_POST['photo']['text'];
        
        
        $gallery_id = 1;
        
        $width = 600;
        $height = 400;
        
        // [!]
        $parent_id = 0;
        $modul_id = 7;
        $section_id = 800;
        $gallery_id = 1;
        
        $new_photo_id = $this->getCountPhoto( );
        $new_photo_id ++; 
        
        $rnd_val = md5(rand() . date("H:i:s")); 
        $rnd_val = substr($rnd_val,0,8);
        
        $link = "{$section_id}_{$gallery_id}_{$rnd_val}.jpg";
        $sort = 10;
        
        $q = "INSERT INTO `photo` SET `parent_id` = '$parent_id',
                                      `modul_id` = '$modul_id',
                                      `section_id` = '$section_id',
                                      `gallery_id` = '$gallery_id',
                                      `date_added` = NOW(),
                                      `title` = '$title',
                                      `text` = '$text',
                                      `link` = '$link',
                                      `sort` = '$sort'
                                      ";
                                      
        $q = mysql_query($q);
        if(!$q) { fb( mysql_error() ); }  
        
        $photo_id = mysql_insert_id();
        
        //
        $file = SITE . "../Image/tour/$link";
        
        //fb($_FILES); //  
        //fb($file); // /home/babagayr/public_html/blagovist.com.ua../Image/tour/photo_1_6.jpg
        //copy($tmp_file,$file);
        $this->model->imgCropAndResize($tmp_file,$file,$width);
    }
    
    private function getCountPhoto($options = null){
        $q = "SELECT COUNT('photo_id') count FROM `photo`
                WHERE modul_id = 7
                AND section_id = 800
                AND gallery_id = 1";
        $r = mysql_query($q);
        if($r){
          if( mysql_num_rows($r) > 0){
            $row = mysql_fetch_assoc($r);
            return $row['count'];
          }  
        }
        return false;  
    }
    
    function actionTourStorePhoto (){

       //if(!User::isAdmin()) return null;
       
        $this->view->Set('message',$this->message);
    
      if($this->getURIarg(2) == 'new'){
        $result = $this->insertPhoto();
        
       
        
        if($result === false){          
          $this->html =  $this->view->render('photo.edit.tpl');          
        } else         
            header('Location:/tour/photo/edit');
            
      } elseif (is_numeric($this->getURIarg(2))){
      
      }
      
      return false;
    }
    
    function actionTourUpdatePhoto(){ 
    
      if(!User::isAdmin()) return null; 
      
      if(!isset($_POST)) return null;
      if(!isset($_POST['image'])) return null;
      
      foreach($_POST['image'] as $photo_id => $arr){
         if(isset($arr['delete'])) $this->dropPhoto($photo_id);
         else { 
          
             $arr['photo_id'] = $photo_id; 
              
             $this->updatePhoto($arr);   
         }
      }
      
      
      header('Location:/tour/photo/edit');
      
     
      
    
      
      return false;
    }
    
    private function dropPhoto($photo_id){
    
        $photo = $this->getPhotoById($photo_id);  
    
        if(!is_array($photo)) return null;
    
        $file_big = SITE .  $photo['path'] . $photo['link'];
        $file_sm = SITE .  $photo['path'] . $photo['sm_link'];
  
        @unlink($file_big);
        @unlink($file_sm);
    
        $q = "DELETE FROM `photo`
                WHERE photo_id = $photo_id ";
        $r = mysql_query($q);
        if(!$r){
          return false;
        }
        
        
        
        return true;
    
    } // --
    
    private function updatePhoto($photo){
    // TODO валидация
    
        if(!isset($photo['photo_id'])) return null;
    
        $photo_id = $photo['photo_id'];
        $title = '';
        $text = '';
        $sort = 10;
    
        if(isset($photo['title'])) $title = $photo['title'];
        if(isset($photo['text'])) $text = $photo['text'];
        if(isset($photo['sort'])) $sort = $photo['sort'];
    
         
       
        $q = "UPDATE `photo`
              SET title = '$title',
                  text = '$text',
                  sort = '$sort'
                WHERE photo_id = $photo_id "; fb($q);
        $r = mysql_query($q);
        if(!$r){
          fb(mysql_error());
          return false;
        }
 
        return true;
    
    } // --
    
    
    
    // TODO seo-photo-name
      // TODO валидация
    
    
    
    
    
    
    
    
    
}

    
 
?>